package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.MbtiTestRecord;
import com.ruoyi.system.domain.MbtiResult;

/**
 * MBTI测试记录Service接口
 *
 * @author ruoyi
 * @date 2025-08-22
 */
public interface IMbtiTestRecordService
{
    /**
     * 查询MBTI测试记录
     *
     * @param recordId MBTI测试记录主键
     * @return MBTI测试记录
     */
    public MbtiTestRecord selectMbtiTestRecordByRecordId(Long recordId);

    /**
     * 查询MBTI测试记录列表
     *
     * @param mbtiTestRecord MBTI测试记录
     * @return MBTI测试记录集合
     */
    public List<MbtiTestRecord> selectMbtiTestRecordList(MbtiTestRecord mbtiTestRecord);

    /**
     * 根据用户ID查询测试记录
     *
     * @param userId 用户ID
     * @return MBTI测试记录集合
     */
    public List<MbtiTestRecord> selectTestRecordsByUserId(Long userId);

    /**
     * 新增MBTI测试记录
     *
     * @param mbtiTestRecord MBTI测试记录
     * @return 结果
     */
    public int insertMbtiTestRecord(MbtiTestRecord mbtiTestRecord);

    /**
     * 修改MBTI测试记录
     *
     * @param mbtiTestRecord MBTI测试记录
     * @return 结果
     */
    public int updateMbtiTestRecord(MbtiTestRecord mbtiTestRecord);

    /**
     * 批量删除MBTI测试记录
     *
     * @param recordIds 需要删除的MBTI测试记录主键集合
     * @return 结果
     */
    public int deleteMbtiTestRecordByRecordIds(Long[] recordIds);

    /**
     * 删除MBTI测试记录信息
     *
     * @param recordId MBTI测试记录主键
     * @return 结果
     */
    public int deleteMbtiTestRecordByRecordId(Long recordId);

    /**
     * 获取测试记录统计信息
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计信息
     */
    public Map<String, Object> getTestRecordStatistics(String startDate, String endDate);

    /**
     * 获取测试记录详情（包含答题记录和结果）
     *
     * @param recordId 测试记录ID
     * @return 测试记录详情
     */
    public Map<String, Object> getTestRecordDetail(Long recordId);

    /**
     * 批量更新测试记录状态
     *
     * @param recordIds 记录ID数组
     * @param status 状态
     * @param updateBy 更新者
     * @return 更新记录数
     */
    public int batchUpdateStatus(Long[] recordIds, String status, String updateBy);

    /**
     * 获取测试完成度统计
     *
     * @return 完成度统计
     */
    public Map<String, Object> getCompletionStatistics();

    /**
     * 获取人格类型分布统计
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 人格类型分布
     */
    public Map<String, Object> getPersonalityDistribution(String startDate, String endDate);

    /**
     * 重新计算测试结果
     *
     * @param recordId 测试记录ID
     * @return 测试结果
     */
    public MbtiResult recalculateTestResult(Long recordId);
}
